home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 6: Level 6 / 17 Bit - Level 6 (1998)(Epic Marketing)[!].iso / !applications! / phxassv4.36 / macropackages / phxmacros.i < prev    next >
Text File  |  1997-02-26  |  12KB  |  543 lines

  1. *****************************************************************
  2. *                                                               *
  3. *       PhxMacro.i      PhxAss Macro Extension                  *
  4. *                                                               *
  5. *****************************************************************
  6. *
  7. *       $VER: PhxMacro 1.4 (14.2.97)
  8. *       (C) 1996-97 Richard Körber -- All rights reserved
  9. *
  10. *       Requires PhxAss V4.33 or higher!
  11. *
  12. * 1.5   27. 2.97 (shred) added fpush, ftop, fpop, fpushm, ftopm,
  13. *                      fpopm, fstore, frecall and clra
  14. *
  15. * 1.4   14. 2.97 (shred) added db, dw and dl macros (compatibility)
  16. *                      added Amiga macros
  17. *
  18. * 1.3   21.10.96 (shred) renamed peek to top, took def2 from phx,
  19. *                      added args and unargs
  20. *
  21. * 1.2   14.10.96 (phx) removed IFCPU macro, fixed ODD macro,
  22. *                      fixed FLIP macro, fixed EXTBL macro,
  23. *                      added another (better) DEF macro, called DEF2.
  24. *
  25. *****************************************************************
  26.  
  27.         IFND    _PHXMACRO_I
  28. _PHXMACRO_I     SET     -1
  29.  
  30. align           MACRO                   ;align <val>
  31.         cnop    0,\1
  32.         ENDM
  33.  
  34. odd             MACRO                   ;opposite of 'even'
  35.         cnop    1,2
  36.         ENDM
  37.  
  38. inc             MACRO                   ;increment
  39.         addq.\0 #1,\1           ;  inc.(b|w|l) <ea>
  40.         ENDM
  41.  
  42. dec             MACRO                   ;decrement
  43.         subq.\0 #1,\1           ;  dec.(b|w|l) <ea>
  44.         ENDM
  45.  
  46. push            MACRO                   ;push to stack
  47.         move.\0 \1,-(sp)        ;  push.(w|l)  <ea>
  48.         ENDM
  49.  
  50. fpush           MACRO                   ;push float to stack
  51.         fmove.\0 \1,-(sp)       ;  fpush.(b|w|l|s|d|x|p) <ea>
  52.         ENDM
  53.  
  54. top             MACRO                   ;top stack
  55.         move.\0 (sp),\1         ;  top.(w|l)  <ea>
  56.         ENDM
  57.  
  58. ftop            MACRO                   ;top float stack
  59.         fmove.\0 (sp),\1        ;  ftop.(b|w|l|s|d|x|p) <ea>
  60.         ENDM
  61.  
  62. pop             MACRO                   ;pop from stack
  63.         move.\0 (sp)+,\1        ;  pop.(w|l)   <ea>
  64.         ENDM
  65.  
  66. fpop            MACRO                   ;pop float from stack
  67.         fmove.\0 (sp)+,\1       ;  fpop.(b|w|l|s|d|x|p) <ea>
  68.         ENDM
  69.  
  70. pushm           MACRO                   ;push register set to stack
  71.         movem.\0 \1,-(sp)       ;  pushm.(w|l) <set>
  72.         ENDM
  73.  
  74. fpushm          MACRO                   ;push float register set to stack
  75.         fmovem.x \1,-(sp)       ;  fpushm.x <set>
  76.         ENDM
  77.  
  78. pushem          MACRO                   ;DevPac compatibility
  79.         movem.\0 \1,-(sp)       ;  pushem.(w|l) <set>
  80.         ENDM
  81.  
  82. topm            MACRO                   ;top register set
  83.         movem.\0 (sp),\1        ;  topm.(w|l) <set>
  84.         ENDM
  85.  
  86. ftopm           MACRO                   ;top float register set
  87.         fmovem.\0 (sp),\1       ;  ftopm.x <set>
  88.         ENDM
  89.  
  90. popm            MACRO                   ;pop register set
  91.         movem.\0 (sp)+,\1       ;  popm.(w|l)   <set>
  92.         ENDM
  93.  
  94. fpopm           MACRO                   ;pop float register set
  95.         fmovem.\0 (sp)+,\1      ;  popm.x   <set>
  96.         ENDM
  97.  
  98. popem           MACRO                   ;DevPac compatibility
  99.         movem.\0 (sp)+,\1       ;  popem.(w|l)   <set>
  100.         ENDM
  101.  
  102. store           MACRO                   ;Push all registers
  103.         movem.l d0-d7/a0-a6,-(sp)
  104.         ENDM
  105.  
  106. recall          MACRO                   ;Restore all registers
  107.         movem.l (sp)+,d0-d7/a0-a6
  108.         ENDM
  109.  
  110. fstore          MACRO                   ;Push all float registers
  111.         fmovem.x fp0-fp7,-(SP)
  112.         ENDM
  113.  
  114. frecall         MACRO                   ;Restore all float registers
  115.         fmovem.x (SP)+,fp0-fp7
  116.         ENDM
  117.  
  118. clra            MACRO                   ;Clear an address (or data) register
  119.         suba.\0 \1,\1           ;  clra.w a0
  120.         ENDM
  121.  
  122. rhi             MACRO                   ;Return when higher
  123.         bls.b   .jmp\@
  124.         rts
  125. .jmp\@
  126.         ENDM
  127.  
  128. rls             MACRO                   ;Return when lower/same
  129.         bhi.b   .jmp\@
  130.         rts
  131. .jmp\@
  132.         ENDM
  133.  
  134. rcc             MACRO                   ;Return when carry clear
  135.         bhi.b   .jmp\@
  136.         rts
  137. .jmp\@
  138.         ENDM
  139.  
  140. rhs             MACRO                   ;Return when higher/same
  141.         bcs.b   .jmp\@
  142.         rts
  143. .jmp\@
  144.         ENDM
  145.  
  146. rcs             MACRO                   ;Return when carry set
  147.         bcc.b   .jmp\@
  148.         rts
  149. .jmp\@
  150.         ENDM
  151.  
  152. rne             MACRO                   ;Return when not equal
  153.         beq.b   .jmp\@
  154.         rts
  155. .jmp\@
  156.         ENDM
  157.  
  158. req             MACRO                   ;Return when equal
  159.         bne.b   .jmp\@
  160.         rts
  161. .jmp\@
  162.         ENDM
  163.  
  164. rvc             MACRO                   ;Return when overflow clear
  165.         bvs.b   .jmp\@
  166.         rts
  167. .jmp\@
  168.         ENDM
  169.  
  170. rvs             MACRO                   ;Return when overflow set
  171.         bvc.b   .jmp\@
  172.         rts
  173. .jmp\@
  174.         ENDM
  175.  
  176. rpl             MACRO                   ;Return when plus
  177.         bmi.b   .jmp\@
  178.         rts
  179. .jmp\@
  180.         ENDM
  181.  
  182. rmi             MACRO                   ;Return when minus
  183.         bpl.b   .jmp\@
  184.         rts
  185. .jmp\@
  186.         ENDM
  187.  
  188. rge             MACRO                   ;Return when greater/equal
  189.         blt.b   .jmp\@
  190.         rts
  191. .jmp\@
  192.         ENDM
  193.  
  194. rlt             MACRO                   ;Return when less than
  195.         bge.b   .jmp\@
  196.         rts
  197. .jmp\@
  198.         ENDM
  199.  
  200. rgt             MACRO                   ;Return when greater than
  201.         ble.b   .jmp\@
  202.         rts
  203. .jmp\@
  204.         ENDM
  205.  
  206. rle             MACRO                   ;Return when less/equal
  207.         bgt.b   .jmp\@
  208.         rts
  209. .jmp\@
  210.         ENDM
  211.  
  212. bsrhi           MACRO                   ;Branch when higher
  213.         bls.b   .jmp\@
  214.         bsr.\0  \1
  215. .jmp\@
  216.         ENDM
  217.  
  218. bsrls           MACRO                   ;Branch when lower/same
  219.         bhi.b   .jmp\@
  220.         bsr.\0  \1
  221. .jmp\@
  222.         ENDM
  223.  
  224. bsrcc           MACRO                   ;Branch when carry clear
  225.         bhi.b   .jmp\@
  226.         bsr.\0  \1
  227. .jmp\@
  228.         ENDM
  229.  
  230. bsrhs           MACRO                   ;Branch when higher/same
  231.         bcs.b   .jmp\@
  232.         bsr.\0  \1
  233. .jmp\@
  234.         ENDM
  235.  
  236. bsrcs           MACRO                   ;Branch when carry set
  237.         bcc.b   .jmp\@
  238.         bsr.\0  \1
  239. .jmp\@
  240.         ENDM
  241.  
  242. bsrne           MACRO                   ;Branch when not equal
  243.         beq.b   .jmp\@
  244.         bsr.\0  \1
  245. .jmp\@
  246.         ENDM
  247.  
  248. bsreq           MACRO                   ;Branch when equal
  249.         bne.b   .jmp\@
  250.         bsr.\0  \1
  251. .jmp\@
  252.         ENDM
  253.  
  254. bsrvc           MACRO                   ;Branch when overflow clear
  255.         bvs.b   .jmp\@
  256.         bsr.\0  \1
  257. .jmp\@
  258.         ENDM
  259.  
  260. bsrvs           MACRO                   ;Branch when overflow set
  261.         bvc.b   .jmp\@
  262.         bsr.\0  \1
  263. .jmp\@
  264.         ENDM
  265.  
  266. bsrpl           MACRO                   ;Branch when plus
  267.         bmi.b   .jmp\@
  268.         bsr.\0  \1
  269. .jmp\@
  270.         ENDM
  271.  
  272. bsrmi           MACRO                   ;Branch when minus
  273.         bpl.b   .jmp\@
  274.         bsr.\0  \1
  275. .jmp\@
  276.         ENDM
  277.  
  278. bsrge           MACRO                   ;Branch when greater/equal
  279.         blt.b   .jmp\@
  280.         bsr.\0  \1
  281. .jmp\@
  282.         ENDM
  283.  
  284. bsrlt           MACRO                   ;Branch when less than
  285.         bge.b   .jmp\@
  286.         bsr.\0  \1
  287. .jmp\@
  288.         ENDM
  289.  
  290. bsrgt           MACRO                   ;Branch when greater than
  291.         ble.b   .jmp\@
  292.         bsr.\0  \1
  293. .jmp\@
  294.         ENDM
  295.  
  296. bsrle           MACRO                   ;Branch when less/equal
  297.         bgt.b   .jmp\@
  298.         bsr.\0  \1
  299. .jmp\@
  300.         ENDM
  301.  
  302. flip            MACRO                   ;flip big<->little endian
  303.         IFC     "\0","L"        ;  flip.(w|l)  <data register>
  304.          ror    #8,\1
  305.          swap   \1
  306.          ror    #8,\1
  307.         ELSE
  308.          IFC    "\0","W"
  309.           ror   #8,\1
  310.          ENDC
  311.         ENDC
  312.         ENDM
  313.  
  314. extbl           MACRO                   ;extb.l for 68000, auto optimizing
  315.         IFGE    __CPU-68020     ;  extbl  <data register>
  316.          extb.l \1
  317.         ELSE
  318.          ext.w  \1
  319.          ext.l  \1
  320.         ENDC
  321.         ENDM
  322.  
  323. db              MACRO                   ; db <exp>[,<exp>]  equals dc.b
  324.         REPT    NARG
  325.         dc.b    \+
  326.         ENDR
  327.         ENDM
  328.  
  329. dw              MACRO                   ; dw <exp>[,<exp>]  equals dc.w
  330.         REPT    NARG
  331.         dc.w    \+
  332.         ENDR
  333.         ENDM
  334.  
  335. dl              MACRO                   ; dl <exp>[,<exp>]  equals dc.l
  336.         REPT    NARG
  337.         dc.l    \+
  338.         ENDR
  339.         ENDM
  340.  
  341. proc            MACRO                   ;procedure header
  342. __REG\1         REG     \2              ;  proc  <name>,<registerset>
  343. \1              pushm.l __REG\1
  344.         ENDM
  345.  
  346. xproc           MACRO                   ;procedure header with reference
  347. __REG\1         REG     \2              ;  xproc  <name>,<registerset>
  348. \1              pushm.l __REG\1
  349.         XDEF    \1
  350.         ENDM
  351.  
  352. endp            MACRO                   ;procedure end
  353.         popm.l  __REG\1         ;  proc  <name>
  354.         rts
  355.         ENDM
  356.  
  357. args            MACRO                   ;put args on stack
  358. __ARGCNT        SET     NARG            ;  args  <param>,<param>,...
  359. CARG            SET     NARG
  360.         REPT    NARG
  361.         move.l  \-,-(sp)
  362.         ENDR
  363.         ENDM
  364.  
  365. margs           MACRO                   ;put more args on stack
  366. __ARGCNT        SET     NARG+__ARGCNT   ;  margs  <param>,<param>,...
  367. CARG            SET     NARG
  368.         REPT    NARG
  369.         move.l  \-,-(sp)
  370.         ENDR
  371.         ENDM
  372.  
  373. unargs          MACRO                   ;restore from last args
  374.         add.l   #__ARGCNT*4,sp  ;  unargs
  375.         ENDM
  376.  
  377.     ; The following macros will define strings in the DATA section!
  378.  
  379. leastr          MACRO                   ;  leastr     <string>,<address register>
  380.         lea     string\@,\2
  381.         SAVE
  382.         DATA
  383. string\@        dc.b    \1,0
  384.         even
  385.         RESTORE
  386.         ENDM
  387.  
  388. peastr          MACRO                   ;  peastr     <string>
  389.         pea     string\@
  390.         SAVE
  391.         DATA
  392. string\@        dc.b    \1,0
  393.         even
  394.         RESTORE
  395.         ENDM
  396.  
  397. defstr          MACRO                   ;  defstr     <label>,<string>
  398.         SAVE
  399.         DATA
  400. \1              dc.b    \2,0
  401.         even
  402.         RESTORE
  403.         ENDM
  404.  
  405. def             MACRO                   ; def.(b|w|l) <label>[,<label>...]
  406.         SAVE
  407.         BSS
  408.         REPT    NARG
  409. \+              ds.\0   1
  410.         ENDR
  411.         IFC     "\0","B"
  412.         even
  413.         ENDC
  414.         RESTORE
  415.         ENDM
  416.  
  417.     ; STRING OPERATIONS
  418.  
  419. copy            MACRO                   ;  copy.(b|w|l) <src>,<dest>
  420. .loop\@         move.\0 \1,\2
  421.         bne     .loop\@
  422.         ENDM
  423.  
  424. strln           MACRO                   ;  strlen.(b|w|l) <str>,<lenreg>
  425.         move.l  \1,\2           ;       String pointer is not changed!
  426. .loop\@         tst.\0  (\1)+
  427.         bne     .loop\@
  428.         sub.l   \2,\1
  429.         exg     \2,\1
  430.         IFC     "\0","w"
  431.          lsr.l  #1,\2
  432.         ENDC
  433.         IFC     "\0","l"
  434.          lsr.l  #2,\2
  435.         ENDC
  436.         ENDM
  437.  
  438.     ; AMIGA RELATED MACROS
  439.  
  440. clrrg           MACRO                   ;  clrrg <hwreg>
  441.         IFGE    __CPU-68010
  442.          clr.w  $dff000+\1
  443.         ELSE
  444.          move.w #0,$dff000+\1
  445.         ENDC
  446.         ENDM
  447.  
  448. setrg           MACRO                   ;  setrg <ea>,<hwreg>
  449.         move.\0 \1,$dff000+\2
  450.         ENDM
  451.  
  452. getrg           MACRO                   ;  getrg <hwreg>,<ea>
  453.         move.w  $dff000+\1,\2
  454.         ENDM
  455.  
  456. trigger         MACRO                   ;  trigger <hwreg>
  457.         IFGE    __CPU-68010
  458.          clr.w  $dff000+\1
  459.         ELSE
  460.          move.w #0,$dff000+\1
  461.         ENDC
  462.         ENDM
  463.  
  464. keycode         MACRO                   ;  keycode <data register>
  465.         not.b   \1
  466.         ror.b   #1,\1
  467.         ENDM
  468.  
  469. copinit         MACRO                   ;  copinit
  470. __COPBLT        SET     $8000
  471. __COPBELOW      SET     0
  472.         ENDM
  473.  
  474. copbfe          MACRO                   ;  copbfe
  475. __COPBLT        SET     0
  476.         ENDM
  477.  
  478. copbfd          MACRO                   ;  copbfd
  479. __COPBLT        SET     $8000
  480.         ENDM
  481.  
  482. copmove         MACRO                   ;  copmove <data>,<hwreg>[,<data>,<hwreg>...]
  483.         REPT    NARG>>1
  484. __PARAM1        SET     \+
  485. __PARAM2        SET     \+
  486.         dc.w    __PARAM2&$01FE,__PARAM1
  487.         ENDR
  488.         ENDM
  489.  
  490. copline         MACRO                   ;  copline <vp>
  491.         IFGE    \1-256
  492.          IFEQ   __COPBELOW
  493.           dc.w  $FFDF,$FFFE
  494. __COPBELOW        SET   1
  495.          ENDC
  496.         ENDC
  497.         dc.w    (\1&$FF)<<8|$0F,$7FFE|__COPBLT
  498.         ENDM
  499.  
  500. copwait         MACRO                   ;  copwait <hp>,<vp>[,<hpm>,<vpm>]
  501.         IFGE    \2-256
  502.          IFEQ   __COPBELOW
  503.           dc.w  $FFDF,$FFFE
  504. __COPBELOW        SET   1
  505.          ENDC
  506.         ENDC
  507.         IFEQ    NARG-2
  508.           dc.w  (((\2)&$FF)<<8)|((\1)>>1)|1,$7FFE|__COPBLT
  509.         ELSE
  510.           dc.w  (((\2)&$FF)<<8)|((\1)>>1)|1
  511.           dc.w  ((((\4)&$FF)<<8)|((\3)>>1)|__COPBLT)&$FFFE
  512.         ENDC
  513.         ENDM
  514.  
  515. copskip         MACRO                   ;  copskip <hp>,<vp>[,<hpm>,<vpm>]
  516.         IFGE    \2-256
  517.          IFEQ   __COPBELOW
  518.           dc.w  $FFDF,$FFFE
  519. __COPBELOW        SET   1
  520.          ENDC
  521.         ENDC
  522.         IFEQ    NARG-2
  523.           dc.w  (((\2)&$FF)<<8)|((\1)>>1)|1,$7FFF|__COPBLT
  524.         ELSE
  525.           dc.w  (((\2)&$FF)<<8)|((\1)>>1)|1
  526.           dc.w  ((((\4)&$FF)<<8)|((\3)>>1)|__COPBLT|1)
  527.         ENDC
  528.         ENDM
  529.  
  530. coppal          MACRO                   ;  coppal
  531.         IFEQ    __COPBELOW
  532.          dc.w   $FFDF,$FFFE
  533. __COPBELOW       SET    1
  534.         ENDC
  535.         ENDM
  536.  
  537. copend          MACRO                   ;  copend
  538.         dc.w    $FFFF,$FFFE
  539.         ENDM
  540.  
  541. *-----------------------------------------------------------*
  542.         ENDC
  543.